An embedded system may be described as a special purpose computing system designed to perform one or a few dedicated functions. Embedded systems are commonly used in consumer devices like personal digital assistants, mobile phones, videogame consoles, microwaves, washing machines, alarm systems, and digital cameras. In addition to the consumer space, embedded systems are used in nearly every industry, from telecommunications to manufacturing, and from transportation to medical devices. In fact, embedded systems are in use so commonly today that it is not feasible to exhaustively list every example.
The term “embedded system” does not have a precise definition. For example, a general purpose computer, such as a laptop, is not typically characterized as an embedded system. However, a laptop is usually composed of a multitude of subsystems such as the hard disk drive, the motherboard, the optical drive, the video processing unit, and various communication devices. Many of the individual subsystems comprising the laptop may themselves be embedded systems.
The complexity of embedded systems can vary. For example, a simple system may have a single microcontroller chip and a light emitting diode, while a more complex system may have multiple microprocessor units and various peripheral communication interfaces and mechanical parts. Manufacturers of modern microprocessors are increasingly adding components and peripheral modules to their microprocessors, and creating what may be thought of as embedded processors. This type of embedded system is often referred to as a system on a chip (SoC). A simple example of an SOC is an application-specific integrated circuit (ASIC) packaged with a universal serial bus (USB) port. Additionally, embedded systems range from those having no user interface at all to those with full user interfaces similar to a desktop operating system.
There are many advantages to using embedded systems. An embedded system is designed typically to do some specific task, as opposed to being a general purpose computer with a wide range of features for performing many different tasks. As a result, design engineers can optimize the embedded system for the desired task, which assists in reducing the size and cost of the device as well as increasing its reliability and performance.
The software that operates an embedded system is generally referred to as “firmware.” Firmware is often stored on read only memory (“ROM”) based storage devices. For example, flash-based read only memory or electronically erasable read only memory (“EEPROM”) devices are often used to store firmware. The firmware is used to control the various features, functioning, and interfaces of the embedded system. Thus, a digital video disk player will have firmware that processes the appropriate response to an input, such as the user pressing the “power” button or the “play” button. Additionally, the firmware in this example would control the storage mechanism, the digital processing circuitry used to decode and output onto the appropriate ports, the video and audio signals stored on the video storage medium, as well as the user interface allowing the user to configure settings of the digital video disk player.
Many embedded systems and software executable on these embedded systems are event-driven. More specifically, events such as changes in the state of the embedded system are used to trigger subsequent responses of the system. As can be appreciated by those of ordinary skill in the art, event-driven systems require a means for keeping track of events and for allowing various components of the system to “wait” for a particular event. Where multiple components or “waiters” are waiting on the same event, it is possible that one or more of the waiters can miss the event if they are busy when the event is identified and processed by the system.
A common solution to this problem is to provide a separate queue for each waiter. Subsequently, any event that the waiter is interested in is added to its local queue. Accordingly, events with more than one waiter are replicated across multiple queues. As can be appreciated, the overhead requirements for this type of system increase proportionally to the number of waiters in the system. Furthermore, the efficiency and reaction time of the waiters in these types of systems decreases proportionally to the number of waiters in the system.